package model

import static org.mockito.Mockito.*
import org.junit.Before
import static org.junit.Assert.*
import org.junit.Test
import org.junit.After
import java.util.List

class PaisTest {
	
	var Pais paisTest
	var Lugar mockLugar
	var Pais paisConexion
	val List<Pais> paises= newArrayList
	var Ruta ruta
	var Villano villano
	
	Pais paisConexion2
	
	@Before
	def void setUp(){
		this.mockLugar = mock(typeof(Lugar))
		when(this.mockLugar.nombre).thenReturn("Banco")
		when(this.mockLugar.consultar).thenReturn(newArrayList)
		this.paisTest = new Pais()
		this.paisConexion = new Pais()
		this.paisConexion2= new Pais()
		paises.add(paisTest)
		paises.add(paisConexion)
		paises.add(paisConexion2)
		
		villano= new Villano()
		ruta= new Ruta(paises,villano)
		
	}
	
	@After
	def void tearDown(){
		this.paisTest = new Pais()
	}
	
	@Test
	def agregarCaracteristicaTest(){
		this.paisTest.agregarCaracteristica("Caracteristica de prueba")
		assertEquals("Deberia tener una caracteristica", this.paisTest.caracteristicas.size, 1)
		}

	@Test
	def agregarLugarTest(){
		this.paisTest.agregarLugarInteresante(this.mockLugar)
		assertEquals("Deberia tener un lugar", this.paisTest.lugaresInteresantes.size, 1)
	}
	
	@Test
	def agregarConexionTest(){
		this.paisTest.agregarConexionAerea(this.paisConexion)
		assertEquals("Deberia tener una conexion", this.paisTest.conexionesAereas.size, 1)
	}

	@Test
	def quitarCaracteristicaTest(){
		this.paisTest.agregarCaracteristica("Caracteristica de prueba")
		this.paisTest.quitarCaracteristica("Caracteristica de prueba")
		assertEquals("No deberia tener una caracteristica", this.paisTest.caracteristicas.size , 0)
	}
	
	@Test
	def quitarLugarDeInteresTest(){
		this.paisTest.agregarLugarInteresante(this.mockLugar)
		this.paisTest.quitarLugarInteresante(this.mockLugar)
		assertEquals("No deberia tener un lugar", this.paisTest.caracteristicas.size, 0)
	}
	
	@Test
	def quitarConexionAereaTest(){
		this.paisTest.agregarConexionAerea(this.paisConexion)
		this.paisTest.quitarConexionAerea(this.paisConexion)
		assertEquals("No deberia tener una conexion", this.paisTest.caracteristicas.size, 0)
	}
	
	@Test
	def informarQueElVillanoLlegoAPaisTest(){
		this.paisTest.agregarLugarInteresante(this.mockLugar)
		this.paisTest.informarQueElVillanoLlego(ruta,villano)
		assertEquals(ruta.paisActual.lugaresInteresantes.get(0).consultar,newArrayList)
	}
	
	@Test
	def darConexionPosibleTest(){
		this.paisTest.agregarConexionAerea(this.paisConexion)
		this.paisTest.agregarConexionAerea(this.paisConexion2)
		
		assertTrue(paisTest.conexionesAereas.contains(paisTest.darConexionPosible))
	}
	
	
	
}
